package com.appspot.mscheckers;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.channel.ChannelMessage;
import com.google.appengine.api.channel.ChannelPresence;
import com.google.appengine.api.channel.ChannelService;
import com.google.appengine.api.channel.ChannelServiceFactory;
import com.google.gson.Gson;

public class DisconnectedHandler extends HttpServlet{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		ChannelService channelService = ChannelServiceFactory.getChannelService();
		ChannelPresence presence = channelService.parsePresence(req);
		String userId = presence.clientId();
		
		User u = Checkers.userMap.remove(userId);
		//send a note to all connected users
		Enumeration<String> keys = Checkers.userMap.keys();
		String key;
		String message = "{\""+Constant.MESSAGE_TYPE+"\":\""+Constant.USER_SIGNOUT+"\"}";
		Gson gson = new Gson();
		String gsu = gson.toJson(u);
		
		while(keys.hasMoreElements()){
			key = keys.nextElement();
			if( key.equals("123321")) continue;
			try{
				channelService.sendMessage(new ChannelMessage(key, message));
				channelService.sendMessage(new ChannelMessage(key, gsu));
			}catch(Exception e){
				e.printStackTrace();
			}
		}		
	}
	
}
